package com.java.basis.io.stream;

import org.junit.Test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 使用 BufferedReader 在控制台读取字符
 * @author wangning
 * @create 2021-05-07 10:34
 */
public class BRRead {
	public static void main(String[] args) throws IOException {
		char c;
		// 使用 System.in 创建 BufferedReader
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("输入字符, 按下 'q' 键退出。");
		// 读取字符
		do {
			c = (char) br.read();
			System.out.println(c);
		} while (c != 'q');
	}

	//为什么Java单元测试不支持控制台输入
	//因为 junit不支持从键盘手动输入，准确来说这个不支持的说法也是相对来说，因为JUNIT是固定的测试，手动的输入会导致一直阻塞
	//junit是用例自动化单元测试的，那么控制台输入这个人工操作就不会支持
	@Test
	public void readLine() throws IOException {
		// 使用 System.in 创建 BufferedReader
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str;
		System.out.println("Enter lines of text.");
		System.out.println("Enter 'end' to quit.");
		do {
			str = br.readLine();
			System.out.println(str);
		} while (!str.equals("end"));
	}
}

//使用 BufferedReader 在控制台读取字符
class BRReadLines {
	public static void main(String[] args) throws IOException {
		// 使用 System.in 创建 BufferedReader
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str;
		System.out.println("Enter lines of text.");
		System.out.println("Enter 'end' to quit.");
		do {
			str = br.readLine();
			System.out.println(str);
		} while (!str.equals("end"));
	}
}

//演示 System.out.write().
//下面的例子用 write() 把字符 "A" 和紧跟着的换行符输出到屏幕：
class WriteDemo {
	public static void main(String[] args) {
		int b;
		b = 'A';
		System.out.write(b);
		System.out.write('\n');
	}
}
